*&---------------------------------------------------------------------*
*& Report ZEX_LISTING_218                                              *
*&---------------------------------------------------------------------*
*& Created By: James Wood (james.wood@bowdarkconsulting.com)           *
*& Created On: 12/12/2008                                              *
*& Purpose:    This program demonstrates the functional method example *
*&             shown in Listing 2.18 and Listing 2.19.                 *
*&---------------------------------------------------------------------*
REPORT zex_listing_218.

*----------------------------------------------------------------------*
*       CLASS lcl_material DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_material DEFINITION.

  PUBLIC SECTION.
    TYPE-POOLS: abap.

    DATA: material_number TYPE string,
          hazardous_ind TYPE abap_bool.

    METHODS: is_hazardous RETURNING value(re_result)
                               TYPE abap_bool.

ENDCLASS.                    "lcl_material DEFINITION

*----------------------------------------------------------------------*
*       CLASS lcl_material IMPLEMENTATION
*----------------------------------------------------------------------*
CLASS lcl_material IMPLEMENTATION.

  METHOD is_hazardous.
    re_result = hazardous_ind.
  ENDMETHOD.                    "is_hazardous

ENDCLASS.                    "lcl_material IMPLEMENTATION

*&---------------------------------------------------------------------*
*& START-OF-SELECTION Event                                            *
*&---------------------------------------------------------------------*
START-OF-SELECTION.
  PERFORM test_functional_method.

*&---------------------------------------------------------------------*
*&      Form  test_functional_method
*&---------------------------------------------------------------------*
FORM test_functional_method.

* Local Data Declarations:
  DATA: lr_material TYPE REF TO lcl_material.

* Create a sample material object:
  CREATE OBJECT lr_material.
  lr_material->material_number = '1234567890'.
  lr_material->hazardous_ind = abap_true.

* Use the functional method in an IF expression:
  IF lr_material->is_hazardous( ) EQ abap_true.
    WRITE: / 'Material', lr_material->material_number,
             'should be handled with caution!'.
  ELSE.
    WRITE: / 'Material', lr_material->material_number,
             'can be handled normally.'.
  ENDIF.

ENDFORM.                    "test_functional_method